package br.unicamp.ic.inf312.arena.visao;

import java.awt.BorderLayout;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import java.awt.Rectangle;
import java.awt.Dimension;

import javax.swing.ButtonGroup;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JToolBar;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.JButton;
import javax.swing.JTextArea;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JSplitPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

import br.unicamp.ic.inf312.arena.controle.AutenticacaoException;
import br.unicamp.ic.inf312.arena.controle.AutenticadorAcessoController;
import br.unicamp.ic.inf312.arena.controle.ComprarBilhete;
import br.unicamp.ic.inf312.arena.controle.LogonInvalidoException;
import br.unicamp.ic.inf312.arena.controle.MaxTentativasException;
import br.unicamp.ic.inf312.arena.modelo.controleacesso.UsuarioSistema;
import br.unicamp.ic.inf312.arena.modelo.vendas.Compra;
import br.unicamp.ic.inf312.arena.persistencia.dao.IUsuarioPerfilDAO;
import br.unicamp.ic.inf312.arena.util.ISaidaPadrao;
import br.unicamp.ic.inf312.arena.util.Util;
import br.unicamp.ic.inf312.arena.visao.eventoscartaz.EventosEmCartaz;
import br.unicamp.ic.inf312.arena.visao.usuariosistema.CadastroUsuarioSistema;
import br.unicamp.ic.inf312.arena.visao.vendas.DevolucaoBilhete;
import br.unicamp.ic.inf312.framework.persistencia.DataAccessObjectFactory;

import java.awt.Point;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Font;
import javax.swing.SwingConstants;
import br.unicamp.ic.inf312.arena.util.I18nManager;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.BorderFactory;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.border.EtchedBorder;
import javax.swing.ImageIcon;

public class Menu extends JFrame implements ISaidaPadrao {
	private EventosEmCartaz visaoEventosEmCartaz = null;
	
	private int nivelAcesso = 0;

	private static final long serialVersionUID = 1L;

	private JPanel jContentPane = null;

	private JScrollPane jScrollPane = null;

	private JPanel jPanel = null;

	private JToolBar jToolBar = null;

	private JPanel workspace = null;

	private JLabel lblLogin = null;

	private JTextField txtLogin = null;

	private JLabel lblPswd = null;

	private JPasswordField pswdSenha = null;

	private JButton jButtonOK = null;

	private JButton jButtonCancelar = null;

	private JTextArea txtaSaidaPadrao = null;

	private JMenuBar barraMenu = null;

	private JMenu menuAdmin = null;  //  @jve:decl-index=0:visual-constraint="667,63"

	private JMenu menuCadastro = null;  //  @jve:decl-index=0:visual-constraint="676,87"

	private JMenu menuFinanceiro = null;  //  @jve:decl-index=0:visual-constraint="675,119"

	private JMenu menuVendas = null;  //  @jve:decl-index=0:visual-constraint="675,144"

	//ATRIBUTOS
	private String usuarioLogado = null;

	private JSplitPane jSplitPane = null;

	private JSplitPane jSplitPaneSaidaPadrao = null;

	private JLabel jLabel = null;

	private JPanel jPanel1 = null;

	private JPanel insercaoEspetaculo;

	private JLabel lblTitulo = null;

	private JPanel pnlLogin = null;

	//TODO: Alteracao para a ativ. 13
	private JMenu menuOpcoes = null;	

	
	/**
	 * This is the default constructor
	 */
	public Menu() {
		super();
		initialize();
		initializeMenu();
		Util.setSaidaPadrao(this);
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setContentPane(getJContentPane());
		this.setJMenuBar(getBarraMenu());
		this.setTitle("Arena Ticket - Arena Entretenimentos S.A.");
		this.setBounds(new Rectangle(5, 5, 790, 560));
		this.setMaximumSize(new Dimension(790, 560));
		this.setResizable(false);
		this.setMinimumSize(new Dimension(790, 555));
		this.setPreferredSize(new Dimension(790, 560));
		//TODO: Alteracao para a ativ. 3
		this.setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
		this.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent evt)
			{
				doExit();
			}
		});
	}
	
	/**
	 * Monta opcoes do Menu
	 * 
	 */
	private void initializeMenu() {
		// CRIAR MENUS e ADICIONAR OS ITENS
		//Administracao
		getMenuAdmin();

		//TODO: Alteracao para a ativ. 3
		JMenuItem cadUsuarioSis = new JMenuItem(I18nManager.getInstance().getPropriedadeString("menu.administrativo.usuarios"));
		//TODO: Alteracao para a ativ. 3
		JMenuItem adminParametrosConfig = new JMenuItem(I18nManager.getInstance().getPropriedadeString("menu.administrativo.parametros"));
		//
		getMenuAdmin().add(cadUsuarioSis);
		getMenuAdmin().add(adminParametrosConfig);

		cadUsuarioSis.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent e) {    
				setWorkspace( new CadastroUsuarioSistema(Menu.this) );
			}
		});

		//Cadastro
		getMenuCadastro();

		//TODO: Alteracao para a ativ. 3
		JMenuItem cadAgendaArte = new JMenuItem(I18nManager.getInstance().getPropriedadeString("menu.cadastro.agenda"));
		//TODO: Alteracao para a ativ. 3
		JMenuItem cadFilme = new JMenuItem(I18nManager.getInstance().getPropriedadeString("menu.cadastro.filmes"));
		//EVENTOS PROGRAMADOS - ACIONA GUIs
		cadFilme.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent e) {    
				setWorkspace( new InsercaoEspetaculo(Menu.this) );
			}
		});

		//TODO: Alteracao para a ativ. 3
		JMenuItem cadTeatro = new JMenuItem(I18nManager.getInstance().getPropriedadeString("menu.cadastro.teatros"));
		cadTeatro.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent e) {
				setWorkspace(  new InsercaoEspetaculo(Menu.this) );
			}
		});

		// itens
		getMenuCadastro().add(cadAgendaArte);
		getMenuCadastro().add(cadFilme);
		getMenuCadastro().add(cadTeatro);

		//Financeiro
		getMenuFinanceiro();
		//TODO: Alteracao para a ativ. 3
		JMenuItem financConsPagtos = new JMenuItem(
				I18nManager.getInstance().getPropriedadeString("menu.financeiro.pagamentos"));
		//item
		getMenuFinanceiro().add(financConsPagtos);

		// Vendas
		getMenuVendas();

		//TODO: Alteracao para a ativ. 3
		JMenuItem devolucaoBilhete = new JMenuItem(
				I18nManager.getInstance().getPropriedadeString("menu.vendas.bilhetes.devolucao"));
		//TODO: Alteracao para a ativ. 11
		devolucaoBilhete.addActionListener( new ActionListener(){
			public void actionPerformed( ActionEvent evt )
			{
				//abre o dialogo de devolucao de bilhetes
				new DevolucaoBilhete().setVisible(true);
			}
		});
		
		//TODO: Alteracao para a ativ. 3
		JMenuItem substituiBilhete = new JMenuItem(
				I18nManager.getInstance().getPropriedadeString("menu.vendas.bilhetes.substituicao"));
		//itens
		getMenuVendas().add(devolucaoBilhete);
		getMenuVendas().add(substituiBilhete);
		
		//TODO: Alteracao para a ativ. 13
		//Opcoes
		getMenuOpcoes();
		
		//itens		
		JMenu laf = new JMenu(
				I18nManager.getInstance().getPropriedadeString("menu.opcoes.laf"));
		
		//gerencia as opcoes de laf
		ButtonGroup btnGroup = new ButtonGroup();
		
		//aplica as mudancas do look and feel
		ActionListener actionLaf = new ActionListener(){
			public void actionPerformed(ActionEvent evt )
			{
				try
				{
					//aplica o laf selecionado
					UIManager.setLookAndFeel(evt.getActionCommand());
					
					//atualiza a parte grafica
					SwingUtilities.updateComponentTreeUI(Menu.this);
				}
				catch ( Exception exc )
				{
					//log
					exc.printStackTrace();
				}
			}
		};
		
		//look and feel instalados
		for ( LookAndFeelInfo look : UIManager.getInstalledLookAndFeels() )
		{
			//cria um item de menu para o laf
			JCheckBoxMenuItem menuItem = new JCheckBoxMenuItem( look.getName() );
			
			//nome da classe do laf
			menuItem.setActionCommand(look.getClassName());
			menuItem.addActionListener(actionLaf);
			
			//adiciona o menu ao gerenciador
			btnGroup.add(menuItem);

			//verifica se eh o look and feel atual
			if ( UIManager.getLookAndFeel().getName().equals(look.getName()))
				menuItem.setSelected(true);
			
			//adiciona ao menu pai
			laf.add(menuItem);
		}
		
		//adiciona o menu de look and feels ao menu opcoes
		getMenuOpcoes().add(laf);
		
		//
		getBarraMenu().add(getMenuAdmin());
		getBarraMenu().add(getMenuCadastro());
		getBarraMenu().add(getMenuFinanceiro());
		getBarraMenu().add(getMenuVendas());
		getBarraMenu().add(getMenuOpcoes());

		//programar acoes
	}
	

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(new BorderLayout());
			jContentPane.setPreferredSize(new Dimension(798, 398));
			jContentPane.add(getJScrollPane(), BorderLayout.CENTER);
		}
		return jContentPane;
	}

	/**
	 * This method initializes jScrollPane	
	 * 	
	 * @return javax.swing.JScrollPane	
	 */
	private JScrollPane getJScrollPane() {
		if (jScrollPane == null) {
			jScrollPane = new JScrollPane();
			jScrollPane.setPreferredSize(new Dimension(797, 399));
			jScrollPane.setViewportView(getJPanel());
		}
		return jScrollPane;
	}

	/**
	 * This method initializes jPanel	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel() {
		if (jPanel == null) {
			jPanel = new JPanel();
			jPanel.setLayout(new FlowLayout());
			jPanel.setPreferredSize(new Dimension(620, 400));
			jPanel.setLocation(new Point(0, 0));
			jPanel.setSize(new Dimension(620, 530));
			jPanel.add(getJSplitPane(), null);
			jPanel.add(getJSplitPaneSaidaPadrao(), null);
		}
		return jPanel;
	}

	/**
	 * This method initializes jToolBar	
	 * 	
	 * @return javax.swing.JToolBar	
	 */
	private JToolBar getJToolBar() {
		if (jToolBar == null) {
			jToolBar = new JToolBar();
			jToolBar.setBounds(new Rectangle(0, 0, 1, 1));
			jToolBar.setPreferredSize(new Dimension(1, 1));
			jToolBar.setEnabled(false);
			jToolBar.setVisible(false);
		}
		return jToolBar;
	}

	/**
	 * This method initializes workspace	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getWorkspace() {
		if (workspace == null) {
			lblTitulo = new JLabel();
			lblTitulo.setHorizontalAlignment(SwingConstants.CENTER);
			lblTitulo.setHorizontalTextPosition(SwingConstants.CENTER);
			lblTitulo.setBounds(new Rectangle(5, 13, 292, 19));
			lblTitulo.setFont(new Font("Dialog", Font.BOLD, 14));
			//TODO: Alteracao para a ativ. 3
			lblTitulo.setText(I18nManager.getInstance().getPropriedadeString("menu.label.titulo"));
			
			lblPswd = new JLabel();
			lblPswd.setBounds(new Rectangle(36, 85, 63, 15));
			//TODO: Alteracao para a ativ. 3
			lblPswd.setText(I18nManager.getInstance().getPropriedadeString("menu.label.senha"));

			lblLogin = new JLabel();
			lblLogin.setBounds(new Rectangle(36, 55, 64, 15));
			//TODO: Alteracao para a ativ. 3
			lblLogin.setText(I18nManager.getInstance().getPropriedadeString("menu.label.login"));

			workspace = new JPanel();
			workspace.setLayout(null);
			workspace.setBounds(new Rectangle(13, 10, 541, 300));
			workspace.setPreferredSize(new Dimension(1019, 330));
			workspace.add(getPnlLogin(), null);
			workspace.add(getMenuOpcoes(), null);
		}
		return workspace;
	}

	/**
	 * Muda o painel (JPanel) em uso na parte inferior da janela.
	 * Todas as GUIs do sistema que forem apresentadas na workspace do Menu
	 * devem ser do tipo JPanel.
	 */
	private void setWorkspace(JPanel panel) {
		getJToolBar().setEnabled(false);
		getJToolBar().setVisible(false);
		jSplitPane.setBottomComponent(panel);
	}

	/**
	 * This method initializes txtLogin	
	 * 	
	 * @return javax.swing.JTextField	
	 */
	private JTextField getTxtLogin() {
		if (txtLogin == null) {
			txtLogin = new JTextField();
			txtLogin.setPreferredSize(new Dimension(100, 20));
			txtLogin.setBounds(new Rectangle(104, 52, 164, 20));
		}
		return txtLogin;
	}

	/**
	 * This method initializes pswdSenha	
	 * 	
	 * @return javax.swing.JPasswordField	
	 */
	private JPasswordField getPswdSenha() {
		if (pswdSenha == null) {
			pswdSenha = new JPasswordField();
			pswdSenha.setPreferredSize(new Dimension(100, 20));
			pswdSenha.setBounds(new Rectangle(104, 82, 165, 20));
			//TODO: Alteracao para a ativ. 2
			pswdSenha.addActionListener( new ActionListener(){
				public void actionPerformed( ActionEvent evt )
				{
					// inicia o processo de logon, sem precisar pressionar o botao
					jButtonOK.getActionListeners()[0].actionPerformed( evt );
				}
			});
		}
		return pswdSenha;
	}

	/**
	 * This method initializes jButtonOK	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButtonOK() {
		if (jButtonOK == null) {
			jButtonOK = new JButton();
			jButtonOK.setFont(new Font("Dialog", Font.BOLD, 10));
			jButtonOK.setActionCommand("OK");
			//TODO: Alteracao para a ativ. 3
			jButtonOK.setIcon(new ImageIcon(getClass().getResource("/icones/step_current.gif")));
			jButtonOK.setLocation(new Point(64, 127));
			jButtonOK.setSize(new Dimension(84, 20));
			jButtonOK.setText(I18nManager.getInstance().getPropriedadeString("menu.botao.entrar"));
			

			//TODO: Alteracao para a ativ. 2
			jButtonOK.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					
					// verifica se os campos de dados foram preenchidos
					if (! checarCamposLogin() )
						return;
					
					try {
						// obtem as informacoes de login
						UsuarioSistema usuario = new UsuarioSistema();
						usuario.setLogin(txtLogin.getText().trim());
						usuario.setSenha(new String(pswdSenha.getPassword()));
						
						// obtem o autenticador de acesso
						AutenticadorAcessoController autenticador = AutenticadorAcessoController.getInstance();  
						
						// tenta validar o login do usuario
						usuario = autenticador.autenticarUsuario( usuario );
						
						// obtem o nivel de acesso do usuario						
						int nivelAcesso = usuario.getPerfil().getNivelAcesso();
						
						// controla as opcoes de acesso conforme o nivel do usuario
						barraMenu.setVisible(true);
						jSplitPaneSaidaPadrao.setVisible(true);
						usuarioLogado = txtLogin.getText();
						setWorkspace(new Vazio());
						
						switch( nivelAcesso )
						{
							// administrador
							case 4:
								menuAdmin.setEnabled( true );
								menuCadastro.setEnabled( true );
								menuFinanceiro.setEnabled( true );
								menuVendas.setEnabled( true );
								break;
								
							// financeiro
							case 3:
								menuAdmin.setEnabled( false );
								menuCadastro.setEnabled( false );
								menuFinanceiro.setEnabled( true );
								menuVendas.setEnabled( false );
								break;
								
							// producao
							case 2:
								menuAdmin.setEnabled( false );
								menuCadastro.setEnabled( true );
								menuFinanceiro.setEnabled( false );
								menuVendas.setEnabled( false );
								break;
								
							// vendas
							case 1:
								menuAdmin.setEnabled( false );
								menuCadastro.setEnabled( false );
								menuFinanceiro.setEnabled( false );
								menuVendas.setEnabled( true );

								//CARREGA WORKSPACE C/ GUI EVENTOS EM CARTAZ
								Menu.this.setVisaoEventosEmCartaz( new EventosEmCartaz(Menu.this) );
								Menu.this.setWorkspace( Menu.this.getVisaoEventosEmCartaz() );
								break;
								
							default:
								menuAdmin.setEnabled( false );
								menuCadastro.setEnabled( false );
								menuFinanceiro.setEnabled( false );
								menuVendas.setEnabled( false );
								
								//nivel de acesso desconhecido
								//TODO: Alteracao para a ativ. 3
								JOptionPane.showMessageDialog(null, 
										I18nManager.getInstance().getPropriedadeString("menu.dialogo.logon.erro.nivelinvalido"),
										I18nManager.getInstance().getPropriedadeString("menu.dialogo.logon.titulo"), JOptionPane.WARNING_MESSAGE);
								break;
						}
					} 
					
					catch ( AutenticacaoException autexc )
					{
						if ( autexc instanceof MaxTentativasException )
						{
							// mostra a msg de erro
							//TODO: Alteracao para a ativ. 3
							JOptionPane.showMessageDialog(null, autexc.getMessage(), 
									I18nManager.getInstance().getPropriedadeString("menu.dialogo.logon.titulo"), JOptionPane.ERROR_MESSAGE);
							
							// finaliza a aplicacao
							doExit();
						}
						
						else if ( autexc instanceof LogonInvalidoException )
						{
							// mostra a msg de erro
							//TODO: Alteracao para a ativ. 3
							JOptionPane.showMessageDialog(null, autexc.getMessage(), 
									I18nManager.getInstance().getPropriedadeString("menu.dialogo.logon.titulo"), JOptionPane.ERROR_MESSAGE);
							
							// limpa as informacoes de entrada							
							pswdSenha.setText("");							
							pswdSenha.requestFocus();
						}
						
						else
						{
							// mostra a msg de erro
							//TODO: Alteracao para a ativ. 3
							JOptionPane.showMessageDialog(null, I18nManager.getInstance().getPropriedadeString("menu.dialogo.logon.erro.outros") + ": " + autexc.getMessage(), 
									I18nManager.getInstance().getPropriedadeString("menu.dialogo.logon.titulo"), JOptionPane.ERROR_MESSAGE);
							
							// debug..
							autexc.printStackTrace();
						}
					}
					
					catch (Exception err) 
					{
						// mostra a msg de erro
						//TODO: Alteracao para a ativ. 3
						JOptionPane.showMessageDialog(null, I18nManager.getInstance().getPropriedadeString("menu.dialogo.logon.erro.outros") + 
								": " + err.getMessage(), I18nManager.getInstance().getPropriedadeString("menu.dialogo.logon.titulo"), JOptionPane.ERROR_MESSAGE);

						// debug..
						err.printStackTrace();
						System.err.println(err.getMessage());
					}
				}
			});
		}
		return jButtonOK;
	}

	private void doExit() {
		//TODO: Alteracao para a ativ. 3
		int decisao = JOptionPane.showConfirmDialog(Menu.this,
				I18nManager.getInstance().getPropriedadeString("menu.dialogo.logon.sair"),
				I18nManager.getInstance().getPropriedadeString("menu.dialogo.logon.titulo"),
				JOptionPane.YES_NO_OPTION);
		if (decisao == JOptionPane.YES_OPTION)		
			System.exit(0);
	}

	/**
	 * This method initializes jButtonCancelar	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButtonCancelar() {
		if (jButtonCancelar == null) {
			jButtonCancelar = new JButton();
			jButtonCancelar.setFont(new Font("Dialog", Font.BOLD, 10));
			jButtonCancelar.setActionCommand("Cancelar");
			jButtonCancelar.setIcon(new ImageIcon(getClass().getResource("/icones/delete_obj.gif")));
			jButtonCancelar.setLocation(new Point(157, 127));
			jButtonCancelar.setSize(new Dimension(84, 20));
			jButtonCancelar.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					//TODO: Alteracao para a ativ. 3
						doExit();
				}
			});
			//TODO: Alteracao para a ativ. 3
			jButtonCancelar.setText(I18nManager.getInstance().getPropriedadeString("menu.botao.sair"));

			
		}
		return jButtonCancelar;
	}

	/**
	 * This method initializes txtaSaidaPadrao	
	 * 	
	 * @return javax.swing.JTextArea	
	 */
	private JTextArea getTxtaSaidaPadrao() {
		if (txtaSaidaPadrao == null) {
			txtaSaidaPadrao = new JTextArea();
			txtaSaidaPadrao.setText("");
			txtaSaidaPadrao.setBounds(new Rectangle(6, 338, 550, 100));
			txtaSaidaPadrao.setPreferredSize(new Dimension(0, 8));
			txtaSaidaPadrao.setEditable(true);
		}
		return txtaSaidaPadrao;
	}

	/**
	 * This method initializes barraMenu	
	 * 	
	 * @return javax.swing.JMenuBar	
	 */
	private JMenuBar getBarraMenu() {
		if (barraMenu == null) {
			barraMenu = new JMenuBar();
			barraMenu.setPreferredSize(new Dimension(80, 30));
			barraMenu.setEnabled(true);
			barraMenu.setVisible(false);
		}
		return barraMenu;
	}

	/**
	 * This method initializes menuAdmin	
	 * 	
	 * @return javax.swing.JMenu	
	 */
	private JMenu getMenuAdmin() {
		if (menuAdmin == null) {
			menuAdmin = new JMenu();
			menuAdmin.setActionCommand("Admin");
			menuAdmin.setPreferredSize(new Dimension(100, 19));			
			menuAdmin.setBounds(new Rectangle(0, 0, 100, 19));
			//menuAdmin.setVisible(true);
			
			//TODO: Alteracao para a ativ. 3
			menuAdmin.setText(I18nManager.getInstance().getPropriedadeString("menu.administrativo"));
		}
		return menuAdmin;
	}

	/**
	 * This method initializes menuCadastro	
	 * 	
	 * @return javax.swing.JMenu	
	 */
	private JMenu getMenuCadastro() {
		if (menuCadastro == null) {
			menuCadastro = new JMenu();
			menuCadastro.setActionCommand("Cadastro");
			menuCadastro.setPreferredSize(new Dimension(65, 19));
			menuCadastro.setBounds(new Rectangle(0, 0, 65, 19));
			//menuCadastro.setVisible(true);
			
			//TODO: Alteracao para a ativ. 3
			menuCadastro.setText(I18nManager.getInstance().getPropriedadeString("menu.cadastro"));
		}
		return menuCadastro;
	}

	/**
	 * This method initializes menuFinanceiro	
	 * 	
	 * @return javax.swing.JMenu	
	 */
	private JMenu getMenuFinanceiro() {
		if (menuFinanceiro == null) {
			menuFinanceiro = new JMenu();
			menuFinanceiro.setBounds(new Rectangle(0, 0, 85, 19));
			//menuFinanceiro.setVisible(true);
			
			//TODO: Alteracao para a ativ. 3
			menuFinanceiro.setText(I18nManager.getInstance().getPropriedadeString("menu.financeiro"));
		}
		return menuFinanceiro;
	}

	/**
	 * This method initializes menuVendas	
	 * 	
	 * @return javax.swing.JMenu	
	 */
	private JMenu getMenuVendas() {
		if (menuVendas == null) {
			menuVendas = new JMenu();
			menuVendas.setActionCommand("Vendas");
			menuVendas.setPreferredSize(new Dimension(65, 19));
			menuVendas.setBounds(new Rectangle(0, 0, 65, 19));
			//menuVendas.setVisible(true);
			
			//TODO: Alteracao para a ativ. 3
			menuVendas.setText(I18nManager.getInstance().getPropriedadeString("menu.vendas"));
		}
		return menuVendas;
	}

	/**
	 * This method initializes jSplitPane	
	 * 	
	 * @return javax.swing.JSplitPane	
	 */
	private JSplitPane getJSplitPane() {
		if (jSplitPane == null) {
			jSplitPane = new JSplitPane();
			jSplitPane.setEnabled(false);
			jSplitPane.setPreferredSize(new Dimension(730, 340));
			jSplitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);
			jSplitPane.setDividerLocation(0);
			//
			jSplitPane.setDividerSize(1);
			jSplitPane.setTopComponent(getJToolBar());
			jSplitPane.setBottomComponent(getWorkspace());
		}
		return jSplitPane;
	}

	/**
	 * This method initializes jSplitPaneSaidaPadrao	
	 * 	
	 * @return javax.swing.JSplitPane	
	 */
	private JSplitPane getJSplitPaneSaidaPadrao() {
		if (jSplitPaneSaidaPadrao == null) {
			jLabel = new JLabel();
			jLabel.setMinimumSize(new Dimension(610,140));
			//TODO: Alteracao para a ativ. 3
			jLabel.setText(I18nManager.getInstance().getPropriedadeString("menu.label.saidapadrao"));

			jSplitPaneSaidaPadrao = new JSplitPane();
			jSplitPaneSaidaPadrao.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);			
			jSplitPaneSaidaPadrao.setDividerLocation(-1);
			jSplitPaneSaidaPadrao.setPreferredSize(new Dimension(730, 131));
			jSplitPaneSaidaPadrao.setTopComponent(jLabel);
			jSplitPaneSaidaPadrao.setBottomComponent(getJPanel1());
		}
		return jSplitPaneSaidaPadrao;
	}

	/**
	 * This method initializes jPanel1	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel1() {
		if (jPanel1 == null) {
			GridLayout gridLayout = new GridLayout();
			gridLayout.setRows(1);
			jPanel1 = new JPanel();
			jPanel1.setLayout(gridLayout);
			jPanel1.setPreferredSize(new Dimension(3, 18));
			jPanel1.setMinimumSize(new Dimension(610, 140));
			jPanel1.add(getTxtaSaidaPadrao(), null);
		}
		return jPanel1;
	}

	public void mostrarErro(Object msg) {
		Util.imprimir(msg);		
	}
	
	public void mostrarMensagem(Object msg, boolean mudaLinha) {
		if (msg instanceof Throwable)
			Util.imprimir(msg);
		else {
			txtaSaidaPadrao.append((String) msg);
		}
	}

	public void limpar() {
		txtaSaidaPadrao.setText("");
	}	
	
	/**
	 * [[ PARA NIVEL DE ACESSO ASSOCIADO A PERFIL VENDEDOR, RETORNA VISAO
	 * EventosEmCartaz INSTANCIADA QDO. DO LOGIN DE USUARIO COM ESSE PERFIL ]]
	 * 
	 * @return EventosEmCartaz {visao instanciada, caso contrario: null se
	 * PERFIL # VENDEDOR}
	 * 
	 */
	protected EventosEmCartaz getVisaoEventosEmCartaz() {
		return visaoEventosEmCartaz;
	}

	/**
	 * 
	 * @param visaoEventosEmCartaz
	 * 
	 */
	protected void setVisaoEventosEmCartaz(EventosEmCartaz visaoEventosEmCartaz) {
		this.visaoEventosEmCartaz = visaoEventosEmCartaz;
	}
	
	//TODO: Alteracao para a ativ. 2
//	-------------------------------------------------	
	private boolean checarCamposLogin()
//	-------------------------------------------------	
	{
		// verifica se o login foi digitado
		if ( txtLogin.getText().trim().length() == 0 )
		{
			// mostra a msg de erro
			//TODO: Alteracao para a ativ. 3
			JOptionPane.showMessageDialog(null,
					I18nManager.getInstance().getPropriedadeString("menu.dialogo.logon.campologin"),
					I18nManager.getInstance().getPropriedadeString("menu.dialogo.logon.titulo"), JOptionPane.ERROR_MESSAGE);
			
			txtLogin.setText("");
			txtLogin.requestFocus();
			
			return ( false );
		}
		
		// verifica se a senha foi digitada
		if ( new String( pswdSenha.getPassword() ).trim().length() == 0 )
		{
			// mostra a msg de erro
			//TODO: Alteracao para a ativ. 3
			JOptionPane.showMessageDialog(null,
					I18nManager.getInstance().getPropriedadeString("menu.dialogo.logon.camposenha"),
					I18nManager.getInstance().getPropriedadeString("menu.dialogo.logon.titulo"), JOptionPane.ERROR_MESSAGE);
			
			pswdSenha.setText("");
			pswdSenha.requestFocus();
			
			return ( false );
		}
		
		return ( true );
	}

	/**
	 * This method initializes pnlLogin	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getPnlLogin() {
		if (pnlLogin == null) {
			pnlLogin = new JPanel();
			pnlLogin.setLayout(null);
			pnlLogin.setBounds(new Rectangle(19, 15, 304, 170));
			pnlLogin.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
			pnlLogin.add(lblPswd, null);
			pnlLogin.add(getJButtonCancelar(), null);
			pnlLogin.add(getPswdSenha(), null);
			pnlLogin.add(lblLogin, null);
			pnlLogin.add(getJButtonOK(), null);
			pnlLogin.add(getTxtLogin(), null);
			pnlLogin.add(lblTitulo, null);
		}
		return pnlLogin;
	}

	/**
	 * This method initializes menuOpcoes	
	 * 	
	 * @return javax.swing.JMenu	
	 */
	//TODO: Alteracao para a ativ. 13
	private JMenu getMenuOpcoes() {
		if (menuOpcoes == null) {
			menuOpcoes = new JMenu();
			menuOpcoes.setActionCommand("Opcoes");
			menuOpcoes.setPreferredSize(new Dimension(65, 19));
			menuOpcoes.setBounds(new Rectangle(0, 0, 65, 19));
			//menuVendas.setVisible(true);
			
			//TODO: Alteracao para a ativ. 3
			menuOpcoes.setText(I18nManager.getInstance().getPropriedadeString("menu.opcoes"));
		}
		return menuOpcoes;
	}
}  //  @jve:decl-index=0:visual-constraint="10,10"